# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/dsa/brcm,sf2.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Broadcom Starfighter 2 integrated swich

maintainers:
  - Florian Fainelli <f.fainelli@gmail.com>

properties:
  compatible:
    items:
      - enum:
          - brcm,bcm4908-switch
          - brcm,bcm7278-switch-v4.0
          - brcm,bcm7278-switch-v4.8
          - brcm,bcm7445-switch-v4.0

  reg:
    minItems: 6
    maxItems: 6

  reg-names:
    items:
      - const: core
      - const: reg
      - const: intrl2_0
      - const: intrl2_1
      - const: fcb
      - const: acb

  interrupts:
    minItems: 2
    maxItems: 2

  interrupt-names:
    items:
      - const: switch_0
      - const: switch_1

  resets:
    maxItems: 1

  reset-names:
    const: switch

  clocks:
    minItems: 1
    items:
      - description: switch's main clock
      - description: dividing of the switch core clock

  clock-names:
    minItems: 1
    items:
      - const: sw_switch
      - const: sw_switch_mdiv

  brcm,num-gphy:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: maximum number of integrated gigabit PHYs in the switch

  brcm,num-rgmii-ports:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: maximum number of RGMII interfaces supported by the switch

  brcm,fcb-pause-override:
    description: if present indicates that the switch supports Failover Control
      Block pause override capability
    type: boolean

  brcm,acb-packets-inflight:
    description: if present indicates that the switch Admission Control Block
      supports reporting the number of packets in-flight in a switch queue
    type: boolean

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  ports:
    type: object

    patternProperties:
      '^port@[0-9a-f]$':
        $ref: dsa-port.yaml#
        unevaluatedProperties: false

        properties:
          brcm,use-bcm-hdr:
            description: if present, indicates that the switch port has Broadcom
              tags enabled (per-packet metadata)
            type: boolean

required:
  - reg
  - interrupts
  - "#address-cells"
  - "#size-cells"

allOf:
  - $ref: "dsa.yaml#"
  - if:
      properties:
        compatible:
          contains:
            enum:
              - brcm,bcm7278-switch-v4.0
              - brcm,bcm7278-switch-v4.8
    then:
      properties:
        clocks:
          minItems: 1
          maxItems: 1
        clock-names:
          minItems: 1
          maxItems: 1
      required:
        - clocks
        - clock-names
  - if:
      properties:
        compatible:
          contains:
            const: brcm,bcm7445-switch-v4.0
    then:
      properties:
        clocks:
          minItems: 2
          maxItems: 2
        clock-names:
          minItems: 2
          maxItems: 2
      required:
        - clocks
        - clock-names

additionalProperties: false

examples:
  - |
    switch@f0b00000 {
            compatible = "brcm,bcm7445-switch-v4.0";
            #address-cells = <1>;
            #size-cells = <0>;
            reg = <0xf0b00000 0x40000>,
                  <0xf0b40000 0x110>,
                  <0xf0b40340 0x30>,
                  <0xf0b40380 0x30>,
                  <0xf0b40400 0x34>,
                  <0xf0b40600 0x208>;
            reg-names = "core", "reg", "intrl2_0", "intrl2_1",
                        "fcb", "acb";
            interrupts = <0 0x18 0>,
                         <0 0x19 0>;
            clocks = <&sw_switch>, <&sw_switch_mdiv>;
            clock-names = "sw_switch", "sw_switch_mdiv";
            brcm,num-gphy = <1>;
            brcm,num-rgmii-ports = <2>;
            brcm,fcb-pause-override;
            brcm,acb-packets-inflight;

            ports {
                    #address-cells = <1>;
                    #size-cells = <0>;

                    port@0 {
                            label = "gphy";
                            reg = <0>;
                    };
            };
    };
